#ifndef FILECLIENT_H
#define FILECLIENT_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QFile>

namespace Ui {
class fileclient;
}

//消息类型
enum MsgType{
    FileInfo,   //文件信息，如文件名，文件大小等信息
    FileData,   //文件数据，即文件内容
};

class fileclient : public QWidget
{
    Q_OBJECT

public:
    explicit fileclient(QWidget *parent = nullptr);
    ~fileclient();

    bool startServer();

public slots:
    void delNewConnect();
    void dealMsg(QTcpSocket* socket);

private slots:
    void on_selectFilebtn_clicked(); // 选择文件按钮

    void on_Serverbtn_clicked();

    void on_resetProgress_clicked();

private:
    void transferFileData(QTcpSocket* socket);
    void transferFileInfo(QTcpSocket* socket);
    QByteArray getFileContent(QString filePath);
    bool checkFile(QString filePath);

    Ui::fileclient *ui;

    QTcpServer* m_tcpServer;
    QTcpSocket *socket;

    qint64 typeMsgSize; // 文件信息所占的大小
    qint64 m_totalBytes;
    qint64 m_sendFileSize; // 传送的文件的大小
    qint64 m_fileInfoWriteBytes;
    qint64 m_speed = 1; // 以1024字节为单位传送
    QString m_sendFilePath; // 传送的文件所在的路径
    QFile m_localFile; // 传送的文件本身，转为了QFile类型
};
#endif // FILECLIENT_H
